luci-mod-network: ES6 refactor for diagnostics master
authorPaul Donald <[email protected]>
Fri, 12 Dec 2025 15:35:54 +0000 (16:35 +0100)
committerPaul Donald <[email protected]>
Fri, 12 Dec 2025 15:40:04 +0000 (16:40 +0100)
Signed-off-by: Paul Donald <[email protected]>
modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js

index fa8ae2f64dd30b0877115609cb5ee97d1f2356f0..6e32d50a472be02b1b4b35cc96615231d6bcf473 100644 (file)
@@ -7,75 +7,70 @@
 'require network';
 
 return view.extend({
-       handleCommand: function(exec, args) {
-               var buttons = document.querySelectorAll('.diag-action > .cbi-button'),
-                       out = document.querySelector('textarea');
+       handleCommand(exec, args) {
+               const buttons = document.querySelectorAll('.diag-action > .cbi-button');
+               const out = document.querySelector('textarea');
 
-               for (var i = 0; i < buttons.length; i++)
-                       buttons[i].setAttribute('disabled', 'true');
+               for (const button of buttons)
+                       button.setAttribute('disabled', 'true');
 
-               return fs.exec_direct(exec, args, 'text', false, true, function(ev) {
+               return fs.exec_direct(exec, args, 'text', false, true, (ev) => {
                        out.textContent = ev.target.response;
-               }).then(function(res) {
+               }).then((res) =>  {
                        out.textContent = res;
-               }).catch(function(err) {
+               }).catch((err) =>  {
                        ui.addNotification(null, E('p', [ err ]))
-               }).finally(function() {
-                       for (var i = 0; i < buttons.length; i++)
-                               buttons[i].removeAttribute('disabled');
+               }).finally(() => {
+                       for (const button of buttons)
+                               button.removeAttribute('disabled');
                });
        },
 
-       handlePing: function(ev, cmd) {
-               var exec = cmd || 'ping',
-                   addr = ev.currentTarget.parentNode.previousSibling.value,
-                   args = (exec == 'ping') ? [ '-4', '-c', '5', '-W', '1', addr ] : [ '-6', '-c', '5', addr ];
+       handlePing(ev, cmd) {
+               const exec = cmd || 'ping';
+               const addr = ev.currentTarget.parentNode.previousSibling.value;
+               const args = (exec == 'ping') ? [ '-4', '-c', '5', '-W', '1', addr ] : [ '-6', '-c', '5', addr ];
 
                return this.handleCommand(exec, args);
        },
 
-       handleTraceroute: function(ev, cmd) {
-               var exec = cmd || 'traceroute',
-                   addr = ev.currentTarget.parentNode.previousSibling.value,
-                   args = (exec == 'traceroute') ? [ '-4', '-q', '1', '-w', '1', '-n', '-m', String(L.env.rpctimeout || 20), addr ] : [ '-q', '1', '-w', '2', '-n', addr ];
+       handleTraceroute(ev, cmd) {
+               const exec = cmd || 'traceroute';
+               const addr = ev.currentTarget.parentNode.previousSibling.value;
+               const args = (exec == 'traceroute') ? [ '-4', '-q', '1', '-w', '1', '-n', '-m', String(L.env.rpctimeout || 20), addr ] : [ '-q', '1', '-w', '2', '-n', addr ];
 
                return this.handleCommand(exec, args);
        },
 
-       handleNslookup: function(ev, cmd) {
-               var addr = ev.currentTarget.parentNode.previousSibling.value;
+       handleNslookup(ev, cmd) {
+               const addr = ev.currentTarget.parentNode.previousSibling.value;
 
                return this.handleCommand('nslookup', [ addr ]);
        },
 
-       handleArpScan: function(ev, cmd) {
-               var addr = ev.currentTarget.parentNode.previousSibling.value;
+       handleArpScan(ev, cmd) {
+               const addr = ev.currentTarget.parentNode.previousSibling.value;
 
                return this.handleCommand('arp-scan', [ '-l', '-I', addr ]);
        },
 
-       load: function() {
+       load() {
                return Promise.all([
-                       L.resolveDefault(fs.stat('/bin/ping6'), {}),
-                       L.resolveDefault(fs.stat('/usr/bin/ping6'), {}),
-                       L.resolveDefault(fs.stat('/bin/traceroute6'), {}),
-                       L.resolveDefault(fs.stat('/usr/bin/traceroute6'), {}),
-                       L.resolveDefault(fs.stat('/usr/bin/arp-scan'), {}),
+                       L.resolveDefault(fs.stat('/bin/ping6') || fs.stat('/usr/bin/ping6'), false),
+                       L.resolveDefault(fs.stat('/bin/traceroute6') || fs.stat('/usr/bin/traceroute6'), false),
+                       L.resolveDefault(fs.stat('/usr/bin/arp-scan'), false),
                        network.getDevices(),
                        uci.load('luci')
                ]);
        },
 
-       render: function(res) {
-               var has_ping6 = res[0].path || res[1].path,
-                   has_traceroute6 = res[2].path || res[3].path,
-                   has_arpscan = res[4].path,
-                   devices = res[5],
-                       dns_host = uci.get('luci', 'diag', 'dns') || 'openwrt.org',
-                       ping_host = uci.get('luci', 'diag', 'ping') || 'openwrt.org',
-                       route_host = uci.get('luci', 'diag', 'route') || 'openwrt.org';
+       render([has_ping6, has_traceroute6, has_arpscan, devices]) {
+               debugger;
+               const dns_host = uci.get('luci', 'diag', 'dns') || 'openwrt.org';
+               const ping_host = uci.get('luci', 'diag', 'ping') || 'openwrt.org';
+               const route_host = uci.get('luci', 'diag', 'route') || 'openwrt.org';
 
-               var table = E('table', { 'class': 'table' }, [
+               const table = E('table', { 'class': 'table' }, [
                                E('tr', { 'class': 'tr' }, [
                                        E('td', { 'class': 'td left', 'style': 'overflow:initial' }, [
                                                E('input', {
@@ -140,7 +135,7 @@ return view.extend({
                                        has_arpscan ? E('td', { 'class': 'td left' }, [
                                                E('select', {
                                                        'style': 'margin:5px 0'
-                                               }, devices.map(function(device) {
+                                               }, devices.map((device) => {
                                                        if (!device.isUp())
                                                                return E([]);
 
@@ -156,7 +151,7 @@ return view.extend({
                                ])
                        ]);
 
-               var view = E('div', { 'class': 'cbi-map'}, [
+               const view = E('div', { 'class': 'cbi-map'}, [
                        E('h2', {}, [ _('Diagnostics') ]),
                        E('div', { 'class': 'cbi-map-descr'}, _('Execution of various network commands to check the connection and name resolution to other systems.')),
                        table,